////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                            //
//                                                         WNProject                                                          //
//                                                                                                                            //
//            This file is distributed under the BSD 2-Clause open source license. See License.txt for details.               //
//                                                                                                                            //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#pragma once

#ifndef __WN_CONCURRENCY_LOCK_GUARD_INL__
#define __WN_CONCURRENCY_LOCK_GUARD_INL__

namespace WNConcurrency {
    template <typename Mutex>
    WNLockGuard<Mutex>::WNLockGuard(Mutex& _mutex, WN_BOOL _adoptLock) :
        mMutex(_mutex) {
        if (!_adoptLock) {
            mMutex.Lock();
        }
    }

    template <typename Mutex>
    WNLockGuard<Mutex>::~WNLockGuard() {
        mMutex.Unlock();
    }
}

#endif // __WN_CONCURRENCY_LOCK_GUARD_INL__